all files / src/ MainHTTPSource.ts

100% Statements 21/21
75% Branches 6/8
100% Functions 6/6
100% Lines 19/19
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41    1×   1×     1× 1× 33× 33× 66×     1×       8× 8×             1× 27×   3×     27× 27× 27×     33× 33× 1×  
import {Stream, MemoryStream} from 'xstream';
import {HTTPSource} from './interfaces';
import {isolateSource, isolateSink} from './isolate';
import {DevToolEnabledSource} from '@cycle/run';
import {adapt} from '@cycle/run/lib/adapt';
import {Response, ResponseStream, RequestOptions} from './interfaces';
 
export class MainHTTPSource implements HTTPSource {
  constructor(
    private _res$$: Stream<MemoryStream<Response> & ResponseStream>,
    private _name: string,
    private I_namespace: Array<string> = []
  ) {}
 
  public filter(
    predicate: (request: RequestOptions) => boolean,
    scope?: string
  ): HTTPSource {
    const filteredResponse$$ = this._res$$.filter(r$ => predicate(r$.request));
    return new MainHTTPSource(
      filteredResponse$$,
      this._name,
      scope === undefined ? this._namespace : this._namespace.concat(scope)
    );
  }
 
  public select(category?: string): any {
    const res$$ = category
      ? this._res$$.filter(
          res$ => res$.request && res$.request.category === category
        )
      : this._res$$;
    const out: DevToolEnabledSource = adapt(res$$);
    out._isCycleSource = this._name;
    return out;
  }
 
  public isolateSource = isolateSource;
  public isolateSink = isolateSink;
}